import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Scanner;
import org.fusesource.jansi.AnsiConsole;
import java.util.Date;

public class SaidaBolsa {
	
	public static void sabolsa() {
		AnsiConsole.out.print("\u001b[2J");
		Scanner dados = new Scanner(System.in);
		SimpleDateFormat datamascara = new SimpleDateFormat("dd/MM/yyyy");
		SimpleDateFormat dataconver = new SimpleDateFormat("yyyy-MM-dd");
		long bolsa=0, id=0;
		short x=1, erro1=1;
		boolean erro;
		String para="", datasaida, cpf="", cnpj="", databanco="";
		Date recebedata;
		int saida=0;
		System.out.println("___________________________________Hemouna______________________________________");
		System.out.println("_______________________________Saida de bolsas__________________________________");
		System.out.println("\n\n\n");
		try{
			Class.forName("org.hsqldb.jdbcDriver" ); 	    
			Connection con = DriverManager.getConnection("jdbc:hsqldb:file:Banco/BD", "sa", "");
			Statement stm = con.createStatement(); 
			while (x == 1){
				System.out.print("Numero da bolsa: ");		
				while (erro1 == 1){
					erro1 = 2;
					bolsa = dados.nextLong();
					ResultSet rs = stm.executeQuery("SELECT id, saida FROM bolsadesangue where id="+bolsa);
					dados.nextLine();
					while (rs.next()){
						id = rs.getLong("id");
						saida = rs.getInt("saida");
					}
					if (id == bolsa){
						if (saida == 1){
							System.out.println("Ja foi dada saida nesta bolsa. Informe outra");
							erro1=1;
						} else {
						erro1=3;
						}
					}
					if (erro1 == 2){
						System.out.println("Numero da bolsa incorreto. Informe outro.");
						erro1=1;
					}
				}
				System.out.print("\nInforme a data da saida (dd/mm/aaaa): ");
				erro = true;
				while (erro == true){
					datasaida = dados.nextLine();
					try{
						recebedata = datamascara.parse(datasaida);
						databanco = dataconver.format(recebedata);
						erro = false;
					} catch (ParseException e) {
						System.out.println("Data informada invalida ou no formato incorreto. Informe novamente.");
					}
				}
				System.out.print("\nSaida para (CNPJ ou CPF): ");
				erro = true;
				while (erro == true){
					while (erro == true){
						while (erro == true){
							para = dados.nextLine();
							if (para.length()==11 || para.length()==14){
								erro = false;
							} else {
								System.out.println("CPF ou CNPJ Informados invalidos. Informe outro.");
							}
						}
						erro = true;
						ResultSet rs = stm.executeQuery("SELECT cpf FROM paciente where cpf ="+para);
						ResultSet rs2 = stm.executeQuery("SELECT cnpj FROM hospital where cnpj="+para);
						while(rs.next()){
							cpf = rs.getString("cpf");
						}
						while(rs2.next()){
							cnpj = rs2.getString("cnpj");
						}
						if (para.equals(cpf) || para.equals(cnpj)){
								erro = false;
								break;
						}
						if (erro == false){
							break;
						} else {
							System.out.println("CPF ou CNPJ nao cadastrado. Informe outro.");
							erro = true;
						}
					}
					erro = true;
					try {
						if (para.length() == 11){
							stm.execute("INSERT INTO BolsadeSangue_has_Paciente VALUES ('"+bolsa+"','"+para+"','"+databanco+"')");
							stm.execute("UPDATE bolsadesangue SET saida = 1 where id = "+bolsa);
							erro = false;
						}
						if (para.length() == 14){
							stm.execute("INSERT INTO BolsadeSangue_has_Hospital VALUES ('"+bolsa+"','"+para+"','"+databanco+"')");
							stm.execute("UPDATE bolsadesangue SET saida = 1 where id = "+bolsa);
							erro = false;
						}
						if (erro == true){
							System.out.println("CPF ou CNPJ invalido. Informe outro.");
							erro = true;
						}
					}catch(Exception e){
						stm.execute("SHUTDOWN");
					    System.out.println("Esta bolsa ja foi rejeitada para este paciente");
					    System.out.println("\n\nDar saida em outra bolsa? 1-Sim ou 2-Nao");
						x = dados.nextShort();
						if (x == 1){
							SaidaBolsa.sabolsa();
						} else {
							MenuPrincipal.main(null);
						}
					}
				}
				
				System.out.printf("\n+------------------------------------------------------------------------------+");
				System.out.printf("|                         Saida realizada com sucesso                          |");
				System.out.printf("+------------------------------------------------------------------------------+");
				System.out.println("\n\nDar saida em outra bolsa? 1-Sim ou 2-Nao");
				x = dados.nextShort();
				erro1 = 1;
			}
			stm.execute("SHUTDOWN");
		}catch(ClassNotFoundException e){
		    System.out.println("Erro ao carregar o driver JDBC. ");
		}catch(Exception e){
		    System.out.println("Erro de SQL: "+e);
		    e.printStackTrace();
		}
		MenuPrincipal.main(null);
	}

}
